package com.itee.monitor.codec;


import com.itee.core.serial.SerialHandler;
import com.itee.core.serial.SerialSession;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
import org.apache.mina.filter.codec.ProtocolDecoderOutput;

/**
 * @author gonglei
 */
public class NodeDecoder extends CumulativeProtocolDecoder {

    public NodeDecoder() {
        super();
    }

    /**
     * 这个方法的返回值是重点： 1、当内容刚好时，返回false，告知父类接收下一批内容
     * 2、内容不够时需要下一批发过来的内容，此时返回false，这样父类CumulativeProtocolDecoder
     * 会将内容放进IoSession中，等下次来数据后就自动拼装再交给本类的doDecode
     * 3、当内容多时，返回true，因为需要再将本批数据进行读取，父类会将剩余的数据再次推送本类的doDecode
     */
    @Override
    protected boolean doDecode(IoSession session, IoBuffer buff, ProtocolDecoderOutput out) throws Exception {
        SerialHandler serialHandler = SerialHandler.getInstance();
        SerialSession serialSession = serialHandler.getSession((String) session.getAttribute(SerialHandler.NAME));
        return serialSession.doDecode(session, buff, out);
    }
}
